// #include<stdio.h>
// #include<stdlib.h>
// #include<string.h>
// char* longestPalindrome(char* s){
//     int sz = strlen(s);
//     char* c = malloc(sizeof(char) * sz);
//     int i, j, tmp_i, tmp_j, tag = 0;

//     for(i = 0; i < sz; i++){
//         for(j = sz - 1; j >= i; j--){
//             if(s[i] == s[j]){
//                 tmp_i = i; tmp_j = j;
//                 while(tmp_i < tmp_j){
//                     if(s[tmp_i] != s[tmp_j]){
//                         tag = 1;
//                         break;
//                     }
//                 }
//                 if(tag == 0){
//                     strncpy(c, )
//                 }
//             }
//         }
//     }
// }
// int main(){
//     char* s = "babad\0";
//     char* c = longestPalindrome(s);
//     printf("%s", c);


//     return 0;
// }

#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
  
// 函数用于判断从left到right的子串是否是回文  
int isPalindrome(char *s, int left, int right) {  
    while (left < right) {  
        if (s[left] != s[right]) {  
            return 0;  
        }  
        left++;  
        right--;  
    }  
    return 1;  
}  
  
// 函数用于扩展中心，找到最长的回文子串  
void expandAroundCenter(char *s, int left, int right, char **longestPalindrome, int *maxLength) {  
    int len = 0;  
    while (left >= 0 && right < strlen(s) && s[left] == s[right]) {  
        len = right - left + 1;  
        left--;  
        right++;  
    }  
    // 如果找到了更长的回文子串，则更新结果  
    if (len > *maxLength) {  
        *maxLength = len;  
        // 重新分配内存以存储新的最长回文子串（包括终止符'\0'）  
        *longestPalindrome = realloc(*longestPalindrome, len + 1);  
        strncpy(*longestPalindrome, s + left + 1, len);  
        (*longestPalindrome)[len] = '\0';  
    }  
}  
  
char* longestPalindrome(char* s) {  
    if (!s || strlen(s) < 2) {  
        return strdup(s); // 如果字符串为空或只有一个字符，则直接返回原字符串  
    }  
  
    char *longestPalindrome = NULL;  
    int maxLength = 0;  
  
    // 遍历每个字符作为中心（或两个相邻字符作为中心）  
    for (int i = 0; i < strlen(s) - 1; i++) {  
        // 奇数长度的回文子串  
        expandAroundCenter(s, i, i, &longestPalindrome, &maxLength);  
        // 偶数长度的回文子串  
        expandAroundCenter(s, i, i + 1, &longestPalindrome, &maxLength);  
    }  
  
    return longestPalindrome;  
}  
  
int main() {  
    char s[] = "baacebbe";  
    char *result = longestPalindrome(s);  
    printf("Longest Palindrome: %s\n", result);  
    free(result); // 不要忘记释放分配的内存  
    return 0;  
}